package clientes;

import java.util.HashMap;
import java.util.Map;
import java.util.Map.Entry;

import org.joda.time.DateTime;

public class CtaCtePesos extends CtaCte {

	private Double saldo;

	public CtaCtePesos(Double saldoInicial, Cliente clienteResponsable) {
		super(clienteResponsable);
		this.saldo = saldoInicial;
	}

	public Double saldoActual() {

		return this.saldo;
	}

	public void debitar(Double unMonto)
			throws ElSaldoDeLaCtaCteEsInsuficienteExeption {

		if (this.saldo < unMonto) {

			throw new ElSaldoDeLaCtaCteEsInsuficienteExeption();
		} else {
			this.saldo = this.saldo - unMonto;
			this.registrarDetalle(unMonto);
			this.clienteResponsable().seRealizoUnaTransaccion(DateTime.now(), unMonto);
		}
	}

	private void registrarDetalle(Double unMonto) {
		DateTime fechaValor = DateTime.now();
			this.detalleDeConsumos().put(fechaValor, unMonto);

	}

	public Map<DateTime, Double> detalleAnteriorA(DateTime fechaHasta) {

		Map<DateTime, Double> detalleResultado = new HashMap<DateTime, Double>();

		for (Entry<DateTime, Double> entryElement : this.detalleDeConsumos()
				.entrySet()) {

			if (fechaHasta.isAfter(entryElement.getKey())) {
				detalleResultado.put(entryElement.getKey(),
						entryElement.getValue());
			}
		}
		return detalleResultado;
	}

	public Map<DateTime, Double> detallePosteriorA(DateTime fechaDesde) {

		Map<DateTime, Double> detalleResultado = new HashMap<DateTime, Double>();

		for (Entry<DateTime, Double> entryElement : this.detalleDeConsumos()
				.entrySet()) {

			if (fechaDesde.isBefore(entryElement.getKey())) {
				detalleResultado.put(entryElement.getKey(),
						entryElement.getValue());
			}
		}
		return detalleResultado;
	}

}
